#include "seil.h"

// #define deltaX 1e-12

float dickeSeil = 0.03;
const int rotmax = 50; // nur gerade Zahlen moeglich!
const int rotmaxSeil = 14;
const int hoehe = 1;
datatypes::Vector3D verticesSeil[(rotmaxSeil-1)+(hoehe-1)*rotmaxSeil];
datatypes::Vector3D normalsSeil[(rotmaxSeil-1)+(hoehe-1)*rotmaxSeil];

float funkSeil(float x) {
	return dickeSeil;
}
float f_(float x, float(*funk)(float x)) {
	return 0; //(funk(x + deltaX) - funk(x)) / (deltaX);
}

void zeichneSeil(float laenge, float dicke) {
	dickeSeil = dicke;
	float tf = 0.0;
	float schritte = laenge;
	for(int t=0; t<hoehe; t++) {
		for(int i=0;i<rotmaxSeil;i++) {
			GLfloat theta = ((2*M_PI*i)/(rotmaxSeil-2));
			verticesSeil[i+t*rotmaxSeil].x = sinf(theta) * funkSeil(tf);
			verticesSeil[i+t*rotmaxSeil].y = tf;
			verticesSeil[i+t*rotmaxSeil].z = cosf(theta) * funkSeil(tf);

			normalsSeil[i+t*rotmaxSeil].x  = sinf(theta) * funkSeil(tf);
			normalsSeil[i+t*rotmaxSeil].y  = -f(tf) * f_(tf, funkSeil);
			normalsSeil[i+t*rotmaxSeil].z  = cosf(theta) * funkSeil(tf);
			mathfunctions::normalizeVector(normalsSeil[i+t*rotmaxSeil]);

			i++;
			verticesSeil[i+t*rotmaxSeil].x = sinf(theta) * funkSeil(tf+schritte);
			verticesSeil[i+t*rotmaxSeil].y = tf+schritte;
			verticesSeil[i+t*rotmaxSeil].z = cosf(theta) * funkSeil(tf+schritte);

			normalsSeil[i+t*rotmaxSeil].x  = sinf(theta) * funkSeil(tf+schritte);
			normalsSeil[i+t*rotmaxSeil].y  = -f(tf) * f_(tf, funkSeil);
			normalsSeil[i+t*rotmaxSeil].z  = cosf(theta) * funkSeil(tf+schritte);
			mathfunctions::normalizeVector(normalsSeil[i+t*rotmaxSeil]);
		}
		tf += schritte;
	}

	dickeSeil = 0.03;
	glEnableClientState(GL_VERTEX_ARRAY);
	glEnableClientState(GL_NORMAL_ARRAY);
	glVertexPointer(3,GL_FLOAT,0,verticesSeil);
	glNormalPointer(GL_FLOAT,0,normalsSeil);
	glDrawArrays(GL_TRIANGLE_STRIP, 0, (rotmaxSeil-1)+(hoehe-1)*(rotmaxSeil)+1);
	glDisableClientState(GL_VERTEX_ARRAY);
	glDisableClientState(GL_NORMAL_ARRAY);
}
